package edu.yang.dbutils.converter;

import edu.yang.dbutils.TypeConverter;

import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

/**
 * 任意时间类型转 LocalDateTime
 * @author yang
 * @date 2024-05-12
 */
public class LocalDateTimeConverter implements TypeConverter {
    /**
     * 判断实体对象属性数据类型是否为 LocalDateTime
     * @param fieldType 实体对象属性的Class对象
     * @return
     */
    @Override
    public boolean supports(Class<?> fieldType) {
        return fieldType.equals(LocalDateTime.class);
    }

    /**
     * 将数据库时间类型数据转换为 LocalDateTime
     * @param fieldType 实体对象属性的Class对象
     * @param value 数据库获取的数据
     * @return
     */
    @Override
    public Object convert(Class<?> fieldType, Object value) {
        return switch (value){
            case LocalDateTime localDateTime -> localDateTime;
            case LocalDate localDate -> localDate.atStartOfDay();
            case LocalTime localTime -> localTime.atDate(LocalDate.now());
            case Date sqlDate -> sqlDate.toLocalDate().atStartOfDay();
            case Timestamp timestamp -> timestamp.toLocalDateTime();
            case Time time -> time.toLocalTime().atDate(LocalDate.now());
            default -> null;
        };
    }
}
